﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace MotoGame.Jogos.Estados.Fases.Moto
{
    /// <summary>
    /// Gerencia a moto controlada pelo jogador, além de definir os comandos do jogo
    /// </summary>
    class Moto : Sprite
    {
        SoundEffect ronco;

        animacao andando;
        animacao correndo;
        public animacao animacao_atual;

        public int limiteTurbo = 500;
        bool recarregarTurbo = true;
        bool Turbo = false;
        bool TurboEngage = true;

        public Vector2 velocidade_moto;

        public Vector2 gravidade = new Vector2 (0,5);

        string texturaMoto;

        public int pontos = 0;

        public float velocidadeX;
        uint velocidadeMaxima = 8;
        float aceleracao = 0.5f;


        public Moto(ContentManager Content, GameWindow Window, string Textura)      //parametros: endereço da textura//
            : base(Content.Load<Texture2D>(Textura))
        {
            this.Window = Window;

            texturaMoto = Textura;

            this.posicao = new Vector2(0, 300); // Posição da moto

            ronco = Content.Load<SoundEffect>("Fases/Fase1/Sounds/SoundEffects/sound_effect");

            #region definindo a animação da moto
            andando = new animacao();
            andando.quadro_X = 67;
            andando.quadro_Y = 47;
            andando.qtd_quadros = 3;
            andando.quadros_seg = 3;
            andando.Y = 0;

            correndo = new animacao();
            correndo.quadro_X = 67;
            correndo.quadro_Y = 47;
            correndo.qtd_quadros = 3;
            correndo.quadros_seg = 9;
            correndo.Y = 47;
            #endregion

            animacao_atual = andando;

            velocidade_moto = new Vector2 (velocidadeX,5);

        }

        public override void Update(GameTime gameTime)
        {
            #region Controles

            if (visivel)
            {
                #region limitador turbo
                if (recarregarTurbo && (limiteTurbo < 500))
                {
                    limiteTurbo++;
                }

                if (recarregarTurbo && (limiteTurbo < 200))
                {
                    TurboEngage = false;
                    animacao_atual = andando;
                }
                else
                {
                    TurboEngage = true;
                }

                if (limiteTurbo <= 0)
                {
                    TurboEngage = false;
                    recarregarTurbo = true;
                    animacao_atual = andando;
                    velocidade_moto = new Vector2(5, 5);
                    velocidadeMaxima = 8;
                }
                #endregion

                #region aceleracao     
                if (Game1.teclado_atual.IsKeyDown(Keys.Right) && velocidadeX < velocidadeMaxima)
                {
                    velocidadeX += aceleracao;
                    posicao.X += velocidadeX;
                    ronco.Play();
                }
                else if (Game1.teclado_atual.IsKeyDown(Keys.Left) && velocidadeX > -velocidadeMaxima)
                {
                    velocidadeX -= aceleracao;
                    posicao.X += velocidadeX;
                    ronco.Play();
                }                
                else if (velocidadeX > 0)
                {
                    velocidadeX -= aceleracao / 2;
                    posicao.X += velocidadeX;
                }
                else if (velocidadeX < 0)
                {
                    velocidadeX += aceleracao / 2;
                    posicao.X += velocidadeX;
                }
                else if (velocidadeX == 0)
                {
                    velocidadeX = 0;
                }
                #endregion

                #region turbo moto
                if (Game1.teclado_atual.IsKeyDown(Keys.Space) && TurboEngage)
                {
                    recarregarTurbo = false;
                    Turbo = true;

                    #region Limite de turbo moto
                    if (Turbo && (limiteTurbo > 0))
                    {
                        animacao_atual = correndo;
                        velocidade_moto = new Vector2(10, 10);
                        velocidadeMaxima = 20;
                        limiteTurbo -= 10;
                    }
                    #endregion
                }

                if (Game1.teclado_atual.IsKeyUp(Keys.Space))
                {
                    recarregarTurbo = true;
                    animacao_atual = andando;
                    velocidade_moto = new Vector2(5, 5);
                    velocidadeMaxima = 8;
                }
                #endregion

            #endregion

                #region manter na tela

                if (posicao.X < 0)
                {
                    posicao.X = 0;
                }

                if (posicao.X > Window.ClientBounds.Width - textura.Width / 3)
                {
                    posicao.X = Window.ClientBounds.Width - textura.Width / 3;
                }

                if (posicao.Y < 0)
                {
                    posicao.Y = 0;
                }

                if (posicao.Y > Window.ClientBounds.Height - textura.Height / 2)
                {
                    posicao.Y = Window.ClientBounds.Height - textura.Height / 2;
                }
                #endregion
            }
        }

        public void Draw(GameTime gameTime, SpriteBatch spriteBatch)
        {
            base.Draw(gameTime, spriteBatch, animacao_atual);
        }
    }
}




                

                
               